package unit;

import common.pojo.CommonResult;
import common.utils.ObjectId;
import httpclient.HttpClientUtils;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

/**
 * Created by asus on 2018/12/14.
 */

public class PushUnits {
    private static final String addUser = "http://ai.yncljk.com/qywx-api/wx/user/create?_timestamp=%s&_nonce=%s&_signature=%s";

    private static final String senMsg = "http://ai.yncljk.com/qywx-api/wx/send/msg?_timestamp=%s&_nonce=%s&_signature=%s";

    private static final String bsId = "qy_luozs";

    private static final String key = "abc";

    public static void main(String[] str) {
        Map map = new HashMap();
        map.put("bsId","qy_luozs");
        map.put("userId","oPQnc4hfKj3Mynqmt9ad1yI3HaDI");
        map.put("content","hahah");
        CommonResult result = sendMsg(map);

    }

    /**添加企业微信用户
     * bsId 企业微信业务ID(String)  必传
     * userId 用户ID(String) 必传
     * name 用户名称(String)  必传
     * mobile 手机号(String) 必传
     * alias 用户别名(String)
     * department 部门ID (List<Long>)
     * position 职位(String)
     * gender 性别 0表示未定义，1表示男性，2表示女性 (Integer)
     * email 邮箱(String)
     * avatar 头像url(String)
     * telephone 座机(String)
     * status 激活状态: 1=已激活，2=已禁用，4=未激活。已激活代表已激活企业微信或已关注微工作台（原企业号）。未激活代表既未激活企业微信又未关注微工作台（原企业号）。 (Integer)
     *
     * @param map
     * @return
     */
    public static CommonResult addUser(Map map) {
        return HttpClientUtils.post(getSignUrl(addUser), map);
    }

    /**
     * 发送消息
     *  bsId 企业微信业务ID(String)   qy_luozs
     * userId 用户ID(String)  openid
     * content 推送内容(String)
     * @param map
     * @return
     */
    public static CommonResult sendMsg(Map map){
        return HttpClientUtils.post(getSignUrl(senMsg), map);
    }

    public  static  String getSignUrl(String url) {
        String timestamp = String.valueOf(new Date().getTime());//距离1970年的时间戳
        String nonce = new ObjectId().toString(); //随机数
        List<String> tmpList = new ArrayList<>(); //三个参数加入list中
        tmpList.add(key);
        tmpList.add(timestamp);
        tmpList.add(nonce);
        Collections.sort(tmpList);  //三个参数按照字典排序
        //待签名字符串
        String tmpStr = StringUtils.join(tmpList.toArray()); //排序后list的三个参数join成字符串
        String signature = "";
        try {
            //以SHA1的算法对tmpStr(代签名字符串)进行签名，得到签名(signature)
            signature = Hex.encodeHexString(MessageDigest.getInstance("SHA-1").digest(tmpStr.getBytes("UTF-8")));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return String.format(url, timestamp, nonce, signature);
    }
}
